// 导入安装好的 uni-app-fetch 模块
import { createUniFetch } from 'uni-app-fetch'
import { useUserStore } from '@/stores/user'

// 定义 tabBar 的路径
const tabBarPagePaths = [
  'pages/task/index',
  'pages/message/index',
  'pages/my/index',
]

//网络请求封装
export const uniFetch = createUniFetch({
  loading: {
    title: '正在加载...',
  },
  baseURL: 'https://slwl-api.itheima.net',
  intercept: {
    //请求拦截器
    request(options) {
      const userState = useUserStore()
      // 全局公共头信息
      const defaultHeaders = {
        Authorization: userState.token,
      }
      // 自定义头信息（token）
      options.header = Object.assign({}, defaultHeaders, options.header)

      // 后续补充拦截器
      return options
    },
    //响应拦截器
    response({ statusCode, data }) {
      if (statusCode === 401) {
        //获取页面栈
        const pageStack = getCurrentPages()
        // 当前页面地址
        const redirectURL = pageStack[pageStack.length - 1].route
        // tabBar 页面需要使用 switchTab 跳转
        const routeType = tabBarPagePaths.includes(redirectURL)
          ? 'switchTab'
          : 'redirectTo'
        return uni.redirectTo({
          url: `/pages/login/index?routeType=${routeType}&redirectURL=/${redirectURL}`,
        })
      }
      // 后续补充实际逻辑
      if (data.code === 200) return data.data
      //这里是个bug
      else uni.showToast({ title: data.msg, icon: 'none' })
      //解决方案，抛出错误，
      // 在处理响应时，如果没有明确的返回（return）或者抛出错误（throw new Error），它会默认将响应视为成功，并将其传递给下一个.then()处理。
      throw new Error(data.msg)
    },
  },
})
